/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Creational.ObjectPool;
import java.util.List;
import java.util.LinkedList;
import java.util.Stack;
/**
 *
 * @author alumno
 */
public class PoolDeObjetosLibres {
    
    /*ultimo en entrar, primero en salir y guarda referencias de los objetos creados*/
    private static List<Empleado> ListaEmpleados= new LinkedList<Empleado>();
    /**Guardara una referencia de los elementos liberados que
    *pueden ser reutilizado
    */
    private static Stack<Integer> EmpleadosLibres = new Stack<Integer>();
    
    /*
     Omtiene un objeto Empleado creado o si existe ya uno crea uno nuevo
     */
    public static Empleado getEmpleado() {
        Empleado objEmpleado;
        if (EmpleadosLibres.size() <= 0) {
            objEmpleado = new Empleado();
            ListaEmpleados.add(objEmpleado);
        } else {
            objEmpleado =  ListaEmpleados.get(EmpleadosLibres.pop());
       }
            return objEmpleado;
    }
    
    public static void freeEmpleado(Empleado obj){
    int index=buscarObjeto(ListaEmpleados,obj);
    if(index<0){
        return;
    }
    EmpleadosLibres.add(new Integer(index));
    }
    
    private static int buscarObjeto(List lista, Object obj){
        for(int i=0;i<lista.size();i++){
            if(lista.get(i)==obj)
            {
                return i;
            }
        }
        return -1;
    }
    
    
}
